// 处理定位城市

import { getCityInfo } from '../api/city'

export const setLocalCity = city => {
  localStorage.setItem('current_city', JSON.stringify(city))
}

const getLocalCity = () => {
  return localStorage.getItem('current_city')
}

export const getCurrentCity = () => {
  // 返回promise,reslove传递一个城市对象
  // 1.先从本地取,本地有就直接返回
  // 2.本地没有就调用百度地图的定位api，获取城市信息并保存到本地
  const localCity = getLocalCity()
  if (localCity) {
    console.log('本地有值');
    // 本地有值
    // return new Promise((resolve, reject) => {
    //   resolve(JSON.parse(localCity))
    // })
    // 简写,当确定只会返回正确结果的时候可以直接用Promise.resolve()替代 new Promise()
    return Promise.resolve(JSON.parse(localCity))
  } else {
    console.log('本地没有值');
    // 本地没有值
    return new Promise((resolve, reject) => {
      // 1.调用百度地图定位的api，获取到城市名
    // 浏览器定位
    //   const myCity = new window.BMap.Geolocation()
    //   myCity.getCurrentPosition(async result => {
    //     console.log('定位',result)
    //   console.log('myCity',myCity);
    //   alert(JSON.stringify(result))
    // })
    // ip定位
    // react脚手架规定第三方api只能用window.调用
      const myCity = new window.BMap.LocalCity()
      myCity.get(async result => {
        console.log('定位',result)
        // 2.根据城市名字，调用我们自己后台的接口，返回城市数据(包含的有value)
        // http://huangjiangjun.top:8088/area/info?name=%E5%8C%97%E4%BA%AC
        const res = await getCityInfo(result.name)
        console.log('城市数据',res);
        // 3.把它保存到本地 & 通过resolve返回给调用者
        setLocalCity(res.data.body)
        resolve(res.data.body)
        // alert(JSON.stringify(result))
      })
      
    }) 
  }
}